﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel;
using DTO;
using BUS;
namespace GUI
{
    public partial class FormSaoLuuDuLieuNhaHang : Form
    {
        public FormSaoLuuDuLieuNhaHang()
        {
            InitializeComponent();
        }
        string path = "";
        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            fbd.Description = "Chọn Nơi Lưu";
            if(fbd.ShowDialog() == DialogResult.OK)
            {
                path = fbd.SelectedPath;
            }
        }
        public void SaveToExcel(string FileName,int CODE_NAME)
        {

            if (File.Exists(FileName))
            {
                File.Delete(FileName);
            }
            Excel._Application oApp;
            Excel.Worksheet oSheet;
            Excel.Workbook oBook;
            oApp = new Excel.Application();
            oBook = (Excel.Workbook)oApp.Workbooks.Add();
            oSheet = (Excel.Worksheet)oBook.Worksheets.get_Item(1);
            switch(CODE_NAME)
            {
                case 0: // Sao Lưu Dữ Liệu Bàn Ăn
                    // Tiêu Đề 
                    oSheet.Cells[1, 1] = "STT";
                    oSheet.Cells[1, 2] = "Ma_Khu_Vuc";
                    oSheet.Cells[1, 3] = "Ten_Ban_An";

                    // Dữ Liệu Bàn Ăn
                    BanAnBUS bn = new BanAnBUS();
                    List<BanAnDTO> ListBanAn = bn.LayDanhSachBanAn();
                    int STT = 1;
                    foreach (BanAnDTO singleRecord in ListBanAn)
                    {
                        STT = STT + 1;
                        oSheet.Cells[STT, 1] = STT - 1;
                        oSheet.Cells[STT, 2] = singleRecord.Id_Khu_Vuc;
                        oSheet.Cells[STT, 3] = singleRecord.Ten_Ban_An;
                    }


                    // Thêm 1 bảng tham chiếu cho Mã Khu Vực
                    // Tiểu Đề
                    oSheet.Cells[1, 5] = "STT";
                    oSheet.Cells[1, 6] = "Ma_Khu_Vuc";
                    oSheet.Cells[1, 7] = "Ten_Khu_Vuc";

                    // Dữ Liệu
                    KhuVucBUS kv = new KhuVucBUS();
                    List<KhuVucDTO> ListKhuVuc = kv.LayDanhSachKhuVuc();
                    STT = 1;
                    foreach (KhuVucDTO singleRecord in ListKhuVuc)
                    {
                        STT = STT + 1;
                        oSheet.Cells[STT, 5] = STT - 1;
                        oSheet.Cells[STT, 6] = singleRecord.Id_Khu_Vuc;
                        oSheet.Cells[STT, 7] = singleRecord.Ten_Khu_Vuc;
                    }
                    break;
                case 1: // Sao Lưu Danh Sach Khu Vực
                    // Thêm 1 bảng tham chiếu cho Mã Khu Vực
                    // Tiểu Đề
                    oSheet.Cells[1, 1] = "STT";
                    oSheet.Cells[1, 2] = "Ma_Khu_Vuc";
                    oSheet.Cells[1, 3] = "Ten_Khu_Vuc";

                    // Dữ Liệu
                    KhuVucBUS kv1 = new KhuVucBUS();
                    List<KhuVucDTO> ListKhuVuc1 = kv1.LayDanhSachKhuVuc();
                    STT = 1;
                    foreach (KhuVucDTO singleRecord in ListKhuVuc1)
                    {
                        STT = STT + 1;
                        oSheet.Cells[STT, 1] = STT - 1;
                        oSheet.Cells[STT, 2] = singleRecord.Id_Khu_Vuc;
                        oSheet.Cells[STT, 3] = singleRecord.Ten_Khu_Vuc;
                    }
                    break;
                case 2: // Sao Lưu Danh Sách Loại Món Ăn
                    // Tiểu Đề
                    oSheet.Cells[1, 1] = "STT";
                    oSheet.Cells[1, 2] = "Ma_Loai_Mon";
                    oSheet.Cells[1, 3] = "Ten_Loai_Mon";

                    // Dữ Liệu
                    LoaiMonAnBUS lma = new LoaiMonAnBUS();
                    List<LoaiMonAnDTO> ListLoaiMonAn = lma.LayDanhSachLoaiMonAn();
                    STT = 1;
                    foreach (LoaiMonAnDTO singleRecord in ListLoaiMonAn)
                    {
                        STT = STT + 1;
                        oSheet.Cells[STT, 1] = STT - 1;
                        oSheet.Cells[STT, 2] = singleRecord.Id_Loai;
                        oSheet.Cells[STT, 3] = singleRecord.Ten_Mon_An;
                    }
                    break;
                case 3: // Sao Lưu Danh Sách Món Ăn
                    // Tiểu Đề
                    oSheet.Cells[1, 1] = "STT";
                    oSheet.Cells[1, 2] = "Ten_Mon_An";
                    oSheet.Cells[1, 3] = "Ma_Loai_Mon_An";
                    oSheet.Cells[1, 4] = "Ma_Loai_Menu";
                    oSheet.Cells[1, 5] = "Don_Gia";

                    // Dữ Liệu
                    MonAnBUS monAn = new MonAnBUS();
                    List<MonAnDTO> ListMonAn = monAn.DanhSachMonAn();
                    STT = 1;
                    foreach (MonAnDTO singleRecord in ListMonAn)
                    {
                        STT = STT + 1;
                        oSheet.Cells[STT, 1] = STT - 1;
                        oSheet.Cells[STT, 2] = singleRecord.Ten_Mon_An;
                        oSheet.Cells[STT, 3] = singleRecord.Id_Loai_Mon_An;
                        oSheet.Cells[STT, 4] = singleRecord.Id_Loai_Menu;
                        oSheet.Cells[STT, 5] = singleRecord.Don_Gia;
                    }

                    // Thêm Bảng Tham Chiếu Loại Menu
                    // Tiểu Đề
                    oSheet.Cells[1, 7] = "STT";
                    oSheet.Cells[1, 8] = "Ma_Loai_Menu";
                    oSheet.Cells[1, 9] = "Ten_Loai_Menu";

                    // Dữ Liệu
                    LoaiMenuBUS LoaiMenu = new LoaiMenuBUS();
                    List<LoaiMenuDTO> ListLoaiMenu = LoaiMenu.LayDanhSachLoaiMenu();
                    STT = 1;
                    foreach (LoaiMenuDTO singleRecord in ListLoaiMenu)
                    {
                        STT = STT + 1;
                        oSheet.Cells[STT, 7] = STT - 1;
                        oSheet.Cells[STT, 8] = singleRecord.Id_Loai_Menu;
                        oSheet.Cells[STT, 9] = singleRecord.Ten_Loai_Menu;
                    }

                    // Thêm Bảng Tham Chiếu Loại Món Ăn
                    // Tiểu Đề
                    oSheet.Cells[1, 11] = "STT";
                    oSheet.Cells[1, 12] = "Ma_Loai_Mon_An";
                    oSheet.Cells[1, 13] = "Ten_Loai_Mon_An";

                    // Dữ Liệu
                    LoaiMonAnBUS LoaiMonAn = new LoaiMonAnBUS();
                    List<LoaiMonAnDTO> ListLoaiMonAn1 = LoaiMonAn.LayDanhSachLoaiMonAn();
                    STT = 1;
                    foreach (LoaiMonAnDTO singleRecord in ListLoaiMonAn1)
                    {
                        STT = STT + 1;
                        oSheet.Cells[STT, 11] = STT - 1;
                        oSheet.Cells[STT, 12] = singleRecord.Id_Loai;
                        oSheet.Cells[STT, 13] = singleRecord.Ten_Mon_An;
                    }
                    break;
            }
            oBook.SaveAs(FileName);
            oBook.Close();
            oApp.Quit();
        }

        // Thêm Tiếp Đầu Ngữ Cho Ngày Lưu Danh Sách
        DateTime ngaySaoLuu = DateTime.Now;

        private void btnDongY_Click(object sender, EventArgs e)
        {
            // Kiểm Tra Trường Hợp Chưa chọn đường dẫn
            if(path=="")
            {
                MessageBox.Show("Vui Lòng Chọn Đường Dẫn");
                path = "";
                return;

            }
            //  Kiểm Tra Trường Hợp Chưa Chọn Bất Cứ Danh Sách nào cần sao lưu
            if ( !cbDanhSachBanAn.Checked && !cbDanhSachKhuVuc.Checked && !cbDanhSachLoaiMonAn.Checked && !cbDanhSachMonAn.Checked)
            {
                MessageBox.Show("Vui Lòng Chọn Danh Sách Cần Sao Lưu");
                path = "";
                return;
            }

            // Trong Lúc Chờ Đợi Thì Đóng 3 Button để trách việc người dùng ấn liên tục
            btnDongY.Enabled = false;
            button1.Enabled = false;
            button2.Enabled = false;
            if (cbDanhSachBanAn.Checked)
            {
                // Chuỗi Tên File Excel
                string PathBanAn = path + "\\" + "SaoLuu_DanhSachBanAn_" + ngaySaoLuu.Day.ToString() + "-" + ngaySaoLuu.Month.ToString() + "-" + ngaySaoLuu.Year.ToString() + ".xls";
                SaveToExcel(PathBanAn, 0);
                
            }
            if (cbDanhSachKhuVuc.Checked)
            {
                string PathKhuVuc = path + "\\" + "SaoLuu_DanhSachKhuVuc_" + ngaySaoLuu.Day.ToString() + "-" + ngaySaoLuu.Month.ToString() + "-" + ngaySaoLuu.Year.ToString() + ".xls";
                SaveToExcel(PathKhuVuc, 1);
               
            }
            if (cbDanhSachLoaiMonAn.Checked)
            {
                string PathLoaiMon = path + "\\" + "SaoLuu_DanhSachLoaiMonAn_" + ngaySaoLuu.Day.ToString() + "-" + ngaySaoLuu.Month.ToString() + "-" + ngaySaoLuu.Year.ToString() + ".xls";
                SaveToExcel(PathLoaiMon, 2);
            }
            if (cbDanhSachMonAn.Checked)
            {
                string PathMonAn = path + "\\" + "SaoLuu_DanhSachMonAn_" + ngaySaoLuu.Day.ToString() + "-" + ngaySaoLuu.Month.ToString() + "-" + ngaySaoLuu.Year.ToString()+".xls";
                SaveToExcel(PathMonAn, 3);
                
            }
            
            // Reset lại Path
            path = "";
            
            MessageBox.Show("Sao Lưu Thành Công");
            MessageBox.Show("Cảnh Báo: Do Danh Sách Sao Lưu Này Được Dùng Để Phục Hồi Dữ Liệu Bị Mất Mát,Không Nên Chỉnh Sửa Những Danh Sách Này ");
            // Mở Lại 3 Nút Cho Người Dùng
            btnDongY.Enabled = true;
            button1.Enabled = true;
            button2.Enabled = true;
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            
            
        }
    }
}
